package com.suray.wcs.service.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.suray.basic.wcs.path.core.Node;
import com.suray.commin.core.utils.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *
 * </p>
 *
 * @author cooper
 * @since 2019-06-26
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("wcs_rgv")
public class RgvDB extends BaseModel implements Serializable {
    private static final long serialVersionUID = 1L;

    @TableId(value = "rgv_id", type = IdType.AUTO)
    private Integer rgvId;
    /**
     * 小车与RES交互编号
     */
    private Integer rgvNo;
    /**
     * 小车类型
     */
    private Integer rgvType;
    /**
     * 开启自动充电模式
     */
    private Boolean isAutoCharge;
    /**
     * 自动充电电量
     */
    private Integer autoBatterySize;
    /**
     * 低电量预警电量
     */
    private Integer alarmBatterySize;
    /**
     * 自动结束充电电量
     */
    private Integer maxBatterySize;
    /**
     * 小车专用充电桩位置
     */
    private String chargeLocation;
    /**
     * 小车当前位置
     */
    private String location;
    /**
     * 行驶里程
     */
    private long mileage;
    /**
     * 能否被跨层调用
     */
    private Boolean isPassFloor;
    /**
     * 小车空闲充电时间
     */
    private Integer freeTime;
    /**
     * 小车 Ip
     */
    private String rgvIp;
    /**
     * 小车端口
     */
    private Integer rgvPort;
    /**
     * 小车广播地址 Ip
     */
    private String rgvBaIp;
    /**
     * 小车 MAC
     */
    private String rgvMac;
    /**
     * X增大方向对应小车方向
     */
    private Integer rgvDirection;
    /**
     * 小车工作区域X
     */
    private String xRegion;
    /**
     * 小车工作区域Y
     */
    private String yRegion;

    /**
     * 小车工作区域Z
     */
    private String zRegion;
    /**
     * 小车工作区域X
     */
    @TableField(exist = false)
    private List xRegionList;
    /**
     * 小车工作区域Y
     */
    @TableField(exist = false)
    private List yRegionList;

    /**
     * 小车工作区域Z
     */
    @TableField(exist = false)
    private List zRegionList;
    /**
     * 缓存位置
     */
    private String freeLocation;

    /**
     * 充电中可分配任务电量
     */
    private Integer assignBatterySize;

    /**
     * 车辆行驶速度
     */
    private Integer speed;

    /**
     * 进出充电桩速度
     */
    private Integer chargeSpeed;

    /**
     * 进出提升机速度
     */
    private Integer liftSpeed;

    /**
     * 进出门速度
     */
    private Integer doorSpeed;

    /**
     * 进出接驳点速度
     */
    private Integer connectNodeSpeed;

    /**
     * 车辆行驶加速度
     */
    private Integer accSpeed;
    /**
     * 托盘顶升时间
     */
    private Integer palletUpTime;

    /**
     * 托盘下降时间
     */
    private Integer palletDownTime;

    /**
     * 转向时间
     */
    private Integer directionTime;

    /**
     * 上线状态 false(0)下线；true(1)上线
     */
    private Boolean online;

    /**
     * 子车的表id（NetAddressManageDB）
     */
    private Integer mappedSonRgv;

    /**
     * 优先模式：0入库优先，1出库优先，2均衡模式，其他优先级加插入时间优先
     */
    private Integer priorityMode;

    public Node getLocationNode() {
        if (location != null) {
            return Node.parseGrid(location);
        }
        return null;
    }

    public Node getSonLocationNode() {
        if (sonRgvLocation != null) {
            return Node.parseGrid(sonRgvLocation);
        }
        return null;
    }

    //一次最大锁定节点数
    private Integer maxLockNum;

    /**
     * 最近一次电量均衡的时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date batteryFullTime;

    /**
     * 子车行驶速度
     */
    private Integer sonRgvSpeed;

    /**
     * 子车加速度
     */
    private Integer sonRgvAccSpeed;

    /**
     * 子车减速度
     */
    private Integer sonRgvDecSpeed;

    /**
     * 子车位置
     */
    private String sonRgvLocation;

    /**
     * 母车内子车条码
     */
    private String sonRgvGroundCodeInMother;

    /**
     * 叉车取放货时抬升的高度, 单位cm
     */
    private Integer forkLiftDis;

    /**
     * 叉车货叉下降时的高度, 单位cm
     */
    private Integer forkLiftDownHeight;

    /**
     * 叉车货叉误差范围, 单位cm
     */
    private Integer forkHeightErrorRange;

    /**
     * 是否托盘校准 false(0)；true(1)
     */
    private Boolean isCalibration;

    /**
     * 条码校准是否打开
     */
    private Boolean codeCalibration;

    /**
     * 电池均衡
     */
    private Boolean BalanceBat;

}
